// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE

(function(mod) {
  if (typeof exports == 'object' && typeof module == 'object')
    // CommonJS
    mod(require('../../lib/codemirror'));
  else if (typeof define == 'function' && define.amd)
    // AMD
    define(['../../lib/codemirror'], mod);
  // Plain browser env
  else mod(CodeMirror);
})(function(CodeMirror) {
  'use strict';

  // Depends on js-yaml.js from https://github.com/nodeca/js-yaml

  // declare global: jsyaml

  CodeMirror.registerHelper('lint', 'yaml', function(text) {
    var found = [];
    if (!window.jsyaml) {
      if (window.console) {
        window.console.error(
          'Error: window.jsyaml not defined, CodeMirror YAML linting cannot run.',
        );
      }
      return found;
    }
    try {
      jsyaml.load(text);
    } catch (e) {
      var loc = e.mark,
        // js-yaml YAMLException doesn't always provide an accurate lineno
        // e.g., when there are multiple yaml docs
        // ---
        // ---
        // foo:bar
        from = loc
          ? CodeMirror.Pos(loc.line, loc.column)
          : CodeMirror.Pos(0, 0),
        to = from;
      found.push({ from: from, to: to, message: e.message });
    }
    return found;
  });
});
